很多時候我們會使用docker作為環境的控管,確保服務執行時環境是一致的。
但某些時候我們可能服務需要執行同時需要資源以及環境的東西
例如:tensorflow inference
有兩種做法可以從container創建一個container
連結 Linux docker 至 container內部
概念:
將Linux docker服務直接送入至container內,使其可以直接呼叫。
docker run hello-world -v /var/run/docker.sock:/var/run/docker.sock
*此安裝在nvcr.io/nvidia/tensorflow:20.10-tf2-py3做為基底的container進行
apt update
apt install docker.io
curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | \
apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | \
tee /etc/apt/sources.list.d/nvidia-container-runtime.list
apt update
apt install nvidia-container-runtime
&
是背景執行的意思,透過fg
即可叫回前景。
由於container並沒有systemctl,必須手動調整一些參數。
於/etc/docker/daemon.json 修改:
{
"storage-driver":"vfs"
,"runtimes":{
"nvidia":{
"path":"nvidia-container-runtime",
"runtimeArgs":[]
}
}
}
vfs
由於在container內所使用的硬碟格式與linux環境不同,故作調整runtimes
安裝完nvidia runtime無法自動完成安裝,必須手動調整
dockerd &
測試內container是否會順利運行docker run hello-world
測試內container是否能access gpu resourcedocker run --runtime=nvidia nvcr.io/nvidia/tensorflow:20.10-tf2-py3 nvidia-smi